package top.lgd.utils;

import cn.hutool.core.util.NumberUtil;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * @author YYJ
 * @version 1.0
 * @since 2020/12/10 14:59
 */
public class NumberUtils extends NumberUtil {

    private final static int YEAR_DAYS = 365;

    public static BigDecimal toNumber(String num){
        BigDecimal bigDecimal = new BigDecimal(0);
        if(StringUtils.isEmpty(num)){
            return bigDecimal;
        }
        try{
            bigDecimal = new BigDecimal(num);
        }catch (Exception e){
        }
        return bigDecimal;
    }

    /**
     * 提供(相对)精确的除法运算,当发生除不尽的情况时,由scale指定精确度,后面的四舍五入
     *
     * @param v1    被除数
     * @param v2    除数
     * @param scale 精确度，如果为负值，取绝对值
     * @return 两个参数的商
     * @since 3.1.0
     */
    public static BigDecimal div(Number v1, Number v2, int scale) {
        if(null == v2 || 0 == v2.intValue()){
            return new BigDecimal(0);
        }
        return div(v1, v2, scale, RoundingMode.HALF_UP);
    }

    /**
     * 年利率转日利率
     * @param yearRate
     * @return
     */
    public static BigDecimal yearToDayRate(Number yearRate){
        BigDecimal bigDecimal = new BigDecimal(0);
        if(null != yearRate){
            return div(yearRate, YEAR_DAYS, 6, RoundingMode.HALF_UP);
        }
        return bigDecimal;
    }

    /**
     * 转年利率
     * @param invest 收益
     * @param cost 成本
     * @param days 天数
     * @return
     */
    public static BigDecimal toYearRate(Number invest, Number cost, Number days){
        BigDecimal bigDecimal = new BigDecimal(0);
        if(null != invest && null != cost && null != days){
            return div(invest, cost,4, RoundingMode.HALF_UP).multiply(div(YEAR_DAYS, days, 4, RoundingMode.HALF_UP));
        }
        return bigDecimal;
    }
}
